package org.example.demo.controller;

import org.example.demo.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;

/**
 * 获取请求参数
 */
@Controller
@RequestMapping("/param")
public class ParamController {
    /**
     * 通过ServletAPI获取请求参数
     */
    @RequestMapping("/servletApi")
    public String test1(HttpServletRequest request) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println(username + password);
        return "success";
    }

    /**
     * 通过控制器方法的形参获取请求参数
     * <p>
     * 若请求参数中出现多个同名的请求参数，可以在控制器方法的形参未知设置字符串类型或字符串数组接收此请求参数
     * </p>
     * RequestParam注解可以指定请求参数名, 是否必须, 和默认值
     */
    @RequestMapping("/testParam")
    public String test2(
            @RequestParam(value = "username", defaultValue = "foobar") String username,
            String password,
            @RequestParam(value = "hobbies", required = false) String[] hobbies) {
        System.out.println(username + password);
        System.out.println(Arrays.toString(hobbies));
        return "success";
    }

    /**
     * 获取请求头和cookie数据
     */
    @RequestMapping("/testHeader")
    public String test3(@RequestHeader("host") String host,
                        @CookieValue("token") String token,
                        @CookieValue("JSESSIONID") String jSessionId) {
        System.out.println(host);
        System.out.println(token);
        System.out.println(jSessionId);
        return "success";
    }

    /**
     * 通过对象获取请求参数
     */
    @RequestMapping("/testBean")
    public String test4(@RequestBody User user) {
        System.out.println(user);
        return "success";
    }
}
